#ifndef _THREADPOOL_H_
#define _THREADPOOL_H_
#include "condition.h"

//任务结构体，将任务放在任务队列由线程池中的线程来执行
typedef struct task
{
	void *(*run)(void *arg);//任务回调函数
	void *arg;   //回调函数参数
	struct task *next;
}task_t;
//线程池结构体
typedef struct threadpool
{
	condition_t ready;//条件变量,任务准备就绪或者线程池销毁通知
	task_t *first;	  //
	task_t *end;
	int counter; //线程池中当前的线程数
	int idle;    //线程池中当前正在等待任务的线程数
	int max_threads;//线程池中允许最大的线程数
	int quit;       //销毁线程池的时候置1
}threadpool_t;
//初始化一个线程池
void threadpool_init(threadpool_t *pool, int threads);
//往线程池中添加任务
void threadpool_add_task(threadpool_t *pool,void *(*run)(void *arg), void *arg);
//销毁线程池
void threadpool_destroy(threadpool_t *pool);
#endif 